#include<iostream>
#include<unistd.h>
#include<fcntl.h>  //O_CREAT
#include<semaphore.h>  
int main()
{
                        //信号量名称     创建信号量 信号量权限位 信号量初始值
    sem_t* sem=sem_open("/my_semaphore",O_CREAT,0644,1); //这里二元信号量刚好就是互斥锁
    if(sem==SEM_FAILED)
    {
        std::cout<<"信号量创建失败"<<std::endl;
    }
    std::cout<<"等待信号量中"<<std::endl;
    sem_wait(sem);  //等待信号量,成功后信号量--,P操作
    std::cout<<"资源处理中"<<std::endl;
    sleep(2); //模拟对公共资源的访问
    sem_post(sem);    //访问完毕释放信号量,成功后信号量++,V操作
    std::cout<<"归还信号量"<<std::endl;
    sem_close(sem);
    sem_unlink("/my_semaphroe");   //删除信号量
    //注意创建时和删除时都是信号量名称,和未命名信号量区分开
    return 0;
}